﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Cliente
{
    public partial class ClientForm : Form
    {
        private List<Cliente.ManagerService.ServerNode> servidores = new List<Cliente.ManagerService.ServerNode>();
        ManagerService.ManagerService servicio = null;


        public ClientForm()
        {
            InitializeComponent();

            servicio = new Cliente.ManagerService.ManagerService();
            ActualizarListaServers();
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            ActualizarListaServers();
        }

        private void ActualizarListaServers()
        {
            List<Cliente.ManagerService.ServerNode> lstServidores = servicio.RequestServers().ToList();
            lstServers.DataSource = lstServidores;
            lstServers.DisplayMember = "URL";
        }

        private void btnRam_Click(object sender, EventArgs e)
        {
            try
            {
                ControlesCPU(false);
                ControlesDisco(false);
                ControlesRam(true);

                Cliente.ManagerService.ServerNode servidor = (Cliente.ManagerService.ServerNode)lstServers.SelectedItem;
                if (servidor != null)
                {
                    Cliente.ManagerService.MemoryResponse respuesta = servicio.RequestMemoria(servidor);
                    if (respuesta != null)
                    {
                        lblResRamLibre.Text = respuesta.RamLibre.ToString() + " Mb";
                        lblResRamTotal.Text = respuesta.RamTotal.ToString() + " Mb";
                    }
                    else
                    {
                        lblExcepcion.Text = "El servidor consultado no responde. Se actualiza lista de servidores..";
                        ActualizarListaServers();
                    }
                }
            }
            catch (Exception ex)
            {
                lblExcepcion.Text = ex.Message;
            }
        }

        private void btnCpu_Click(object sender, EventArgs e)
        {
            try
            {
                ControlesCPU(true);
                ControlesDisco(false);
                ControlesRam(false);

                Cliente.ManagerService.ServerNode servidor = (Cliente.ManagerService.ServerNode)lstServers.SelectedItem;
                if (servidor != null)
                {
                    Cliente.ManagerService.CpuResponse respuesta = servicio.RequestCpu(servidor);
                    if (respuesta != null)
                    {
                        lblResCpu.Text = respuesta.CpuUsage.ToString() + " %";
                    }
                    else
                    {
                        lblExcepcion.Text = "El servidor consultado no responde. Se actualiza lista de servidores..";
                        ActualizarListaServers();
                    }
                }
            }
            catch (Exception ex)
            {
                lblExcepcion.Text = ex.Message;
            }
        }

        private void btnDisco_Click(object sender, EventArgs e)
        {
            try
            {                
                ControlesCPU(false);
                ControlesDisco(true);
                ControlesRam(false);

                Cliente.ManagerService.ServerNode servidor = (Cliente.ManagerService.ServerNode)lstServers.SelectedItem;
                if (servidor != null)
                {
                    Cliente.ManagerService.DiscoResponse respuesta = servicio.RequestDisco(servidor);
                    if (respuesta != null)
                    {
                        lblResDiscoLibre.Text = respuesta.CapacidadLibre.ToString() + " Gb";
                        lblResDiscoTotal.Text = respuesta.CapacidadTotal.ToString() + " Gb";
                    }
                    else
                    {
                        lblExcepcion.Text = "El servidor consultado no responde. Se actualiza lista de servidores..";
                        ActualizarListaServers();
                    }
                }
            }
            catch (Exception ex)
            {
                lblExcepcion.Text = ex.Message;
            }
        }

        #region Mostrar/Ocultar Controles
        private void ControlesRam(bool visible)
        {
            lblExcepcion.Text = "";
            lblResRamLibre.Visible = visible;
            lblResRamTotal.Visible = visible;
            lblRamLibre.Visible = visible;
            lblRamTotal.Visible = visible;
            picRam.Visible = visible;
        }
        private void ControlesCPU(bool visible)
        {
            lblExcepcion.Text = "";
            lblCpuUsage.Visible = visible;
            lblResCpu.Visible = visible;
            picCPU.Visible = visible;
        }
        private void ControlesDisco(bool visible)
        {
            lblExcepcion.Text = "";
            lblResDiscoLibre.Visible = visible;
            lblResDiscoTotal.Visible = visible;
            lblDiscoLibre.Visible = visible;
            lblDiscoTotal.Visible = visible;
            picDisco.Visible = visible;
        }
        #endregion
    }
}
